package test_achieve.courierapp;

import constant.Constant;
import cucumber.api.java.en.Given;
import org.junit.Assert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import util.tools.CommonTools;

import java.util.List;

/**
 * Created by lenovo on 2018/1/22.
 */
public class CourierApp {

    @Given("^正常进入待抢单且全部听单$")
    public void 正常进入待抢单且全部听单() throws Throwable {
        boolean  btn= CommonTools.checkElementExit(Constant.driverCourier,"id","tv_order_receive_type_tip");
        Assert.assertEquals(false,btn);//断言
    }

    @Given("^无法进入待抢单中$")
    public void 无法进入待抢单中() throws Throwable {
        boolean btn = CommonTools.checkElementExit(Constant.driverCourier,"id","btn_vehicle");
        Assert.assertEquals(true,btn);
    }

    @Given("^正常进入待抢单且只接收预约单$")
    public void 正常进入待抢单且只接收预约单() throws Throwable {
//        boolean btn = CommonTools.checkElementExit(Constant.driverCourier,"id","btn_vehicle");
//        Assert.assertEquals(false,btn);
        String btn = Constant.driverCourier.findElement(By.id("tv_order_receive_type_tip")).getText();
        Assert.assertEquals("目前听单模式只接收预约单",btn);

    }

    @Given("^正常进入待抢单且只接收实时单$")
    public void 正常进入待抢单且只接收实时单() throws Throwable {
//        boolean btn = CommonTools.checkElementExit(Constant.driverCourier,"id","tv_order_receive_type_tip");
//        Assert.assertEquals(true,btn);
        String btn = Constant.driverCourier.findElement(By.id("tv_order_receive_type_tip")).getText();
        Assert.assertEquals("目前听单模式只接收实时单",btn);
    }

    @Given("^遍历常见问题并返回$")
    public void 遍历常见问题并返回() throws Throwable {
        点击常见问题();
        遍历常见问题();
        点击返回按钮();
    }

    public void 点击常见问题() {
        Constant.driverCourier.findElement(By.id("item_faq")).click();
    }

    public void 遍历常见问题() {
        String btn = Constant.driverCourier.findElement(By.id("title_txt")).getText();//获取常见问题
        Assert.assertEquals(true,btn.contains("常见问题"));
    }

    public void 点击返回按钮() {
        if (CommonTools.checkElementExit(Constant.driverCourier,"id","custom_title_btn_left"))//判断返回按钮
        {
            Constant.driverCourier.findElement(By.id("custom_title_btn_left")).click();
        } else if (CommonTools.checkElementExit(Constant.driverCourier,"id","back_image_view")) {//判断第二种返回按钮
            Constant.driverCourier.findElement(By.id("back_image_view")).click();
        }
    }


    @Given("^遍历地图离线并返回$")
    public void 遍历地图离线并返回() throws Throwable {
        点击地图离线();
        点击下载管理();
        点击返回按钮();
    }

    private void 点击下载管理() {
        Constant.driverCourier.findElement(By.id("downloaded_list_text")).click();
    }

    public void 点击地图离线() {
        Constant.driverCourier.findElement(By.id("item_offline")).click();
    }


    @Given("^遍历消息中心并返回$")
    public void 遍历消息中心并返回() throws Throwable {
        点击消息中心();
        点击重要通知();
        遍历重要通知();//是否有重要通知
        点击返回按钮();//返回消息中心
        点击一般通知();
        遍历一般通知();//是否有一般通知
        点击返回按钮();//返回消息中心
        点击处罚公告();
        遍历处罚公告();//是否有处罚公告
        点击返回按钮();//返回消息中心
        点击个人消息();
        遍历个人消息();
        点击返回按钮();//返回更多
    }

    public void 点击消息中心() {
        Constant.driverCourier.findElement(By.id("item_message")).click();
        网络原因();
    }

    public void 网络原因() {
        boolean btn = CommonTools.checkElementExit(Constant.driverCourier,"id","set_net_button");//网络原因
        Assert.assertEquals(false,btn);
    }


    public void 遍历个人消息() {
        boolean btn = CommonTools.checkElementExit(Constant.driverCourier,"id","tv_title");
        Assert.assertEquals(true,btn);
    }

    public void 点击个人消息() {
        list(2);
    }

    public void 遍历处罚公告() {//是否有处罚公告
        String btn = Constant.driverCourier.findElement(By.id("title_txt")).getText();
        Assert.assertEquals("处罚公告",btn);
    }

    public void 遍历一般通知() {//是否有一般通知
        String btn = Constant.driverCourier.findElement(By.id("title_txt")).getText();
        Assert.assertEquals("一般通知",btn);
    }

    public void 点击重要通知() {
        list(3);
    }
    /**
     * @return
     */
    public void list(int k){
        List<WebElement> btnList = Constant.driverCourier.findElementsByClassName("android.widget.TextView");
        System.out.println(btnList.size());
        for (int j = 0; j < btnList.size(); j++) {
            System.out.println("第"+j+":"+btnList.get(j).getText());
        }
        WebElement btn = btnList.get(k);
        btn.click();
    }

    public void 点击一般通知() {
        list(4);
    }
    public void 点击处罚公告() {
        list(5);
    }
    public void 遍历重要通知() { //是否有重要通知
        String btn = Constant.driverCourier.findElement(By.id("title_txt")).getText();
        Assert.assertEquals("重要通知",btn);
    }

    @Given("^遍历闪送装备并返回$")
    public void 遍历闪送装备并返回() throws Throwable {
        点击闪送装备();
        遍历装备购买();
        点击我的装备();
        点击待领取装备();
        遍历待领取装备();
        点击返回按钮();//返回闪送装备页面
        点击已领取装备();
        遍历已领取装备();
        点击返回按钮();//返回闪送装备页面
        点击返回按钮();//返回更多
    }

    public void 点击闪送装备() {
        Constant.driverCourier.findElement(By.id("item_mall")).click();//点击闪送装备
    }

    public void 遍历已领取装备() {
        String btn = Constant.driverCourier.findElement(By.id("title_txt")).getText();
        Assert.assertEquals("已领取装备",btn);
    }

    public void 点击已领取装备() {
        Constant.driverCourier.findElement(By.id("tv_acquired")).click();
    }

    public void 遍历待领取装备() {
        String btn = Constant.driverCourier.findElement(By.id("title_txt")).getText();
        Assert.assertEquals("待领取装备",btn);
    }

    public void 点击待领取装备() {
        Constant.driverCourier.findElement(By.id("tv_unacquire")).click();
    }

    public void 点击我的装备() {
        Constant.driverCourier.findElement(By.id("tv_my_equip")).click();
    }


    public void 遍历装备购买() {
        String btn = Constant.driverCourier.findElement(By.id("tv_empty")).getText();
        Assert.assertEquals("当前没有可购买装备!",btn);
    }

    @Given("^遍历设置并返回$")
    public void 遍历设置并返回() throws Throwable {
        点击设置();
        遍历设置();
        点击返回按钮();//返回更多
    }

    public void 点击设置() {
        Constant.driverCourier.findElement(By.id("task_setting")).click();
    }

    public void 遍历设置() {
        String btn = Constant.driverCourier.findElement(By.id("title_txt")).getText();
        Assert.assertEquals("设置",btn);
    }


    @Given("^遍历客服与帮助并返回$")
    public void 遍历客服与帮助并返回() throws Throwable {
        点击客服与帮助();
        网络原因();
        遍历客服与帮助中的常见问题();
        点击订单类();
        遍历订单类();
        点击密码类();
        遍历密码类();
        点击闪送员相关();
        遍历闪送员相关();
        点击返回按钮();//返回更多
    }

    public void 遍历闪送员相关() {
        网络原因();
    }

    public void 点击闪送员相关() {
        listWeb(3);
    }

    public void 遍历密码类() {
        网络原因();
    }

    public void 遍历订单类() {
        网络原因();
    }

    public void 点击订单类() {
        listWeb(1);
    }
    public void 点击密码类() {
        listWeb(2);
    }
    public void listWeb(int i){
        List<WebElement> btnList = Constant.driverCourier.findElementsByClassName("android.view.View");
        System.out.println(btnList.size());
        for (int j = 0; j < btnList.size(); j++) {
            System.out.println("第"+j+":"+btnList.get(j).getText());
        }
        WebElement btn = btnList.get(i);
        btn.click();
    }

    public void 遍历客服与帮助中的常见问题() {
        网络原因();
    }

    public void 点击客服与帮助() {
        Constant.driverCourier.findElement(By.id("conversationBtn")).click();
    }


    @Given("^遍历密码修改并返回$")
    public void 遍历密码修改并返回() throws Throwable {
        点击密码修改();
        遍历密码修改();
        点击返回按钮();//返回更多
    }

    public void 遍历密码修改() {
        boolean btn = CommonTools.checkElementExit(Constant.driverCourier,"id","b_signin");
        Assert.assertEquals(true,btn);
    }

    public void 点击密码修改() {
        Constant.driverCourier.findElement(By.id("item_modifypassword")).click();
    }

    @Given("^遍历申请更换城市并返回$")
    public void 遍历申请更换城市并返回() throws Throwable {
        点击申请更换城市();
        点击更换服务城市();
        遍历更换服务城市();
        点击返回按钮();//返回变更城市申请须知
        点击返回按钮();//返回更多
    }

    public void 遍历更换服务城市() {
        网络原因();
        String btn = Constant.driverCourier.findElement(By.id("title_txt")).getText();
        Assert.assertEquals("选择所在城市",btn);
    }

    public void 点击更换服务城市() {
        Constant.driverCourier.findElement(By.id("next_btn")).click();

    }

    public void 点击申请更换城市() {
        Constant.driverCourier.findElement(By.id("item_modifycity")).click();
    }

    @Given("^遍历处罚申诉并返回$")
    public void 遍历处罚申诉并返回() throws Throwable {
        点击处罚申诉();
        点击我要申诉();
        遍历申诉处罚项();
        点击返回按钮();//返回处罚申诉页面
        点击返回按钮();//返回更多
    }

    public void 遍历申诉处罚项() {
        String btn = Constant.driverCourier.findElement(By.id("title_txt")).getText();
        Assert.assertEquals("选择申诉处罚项",btn);
    }

    public void 点击我要申诉() {
        Constant.driverCourier.findElement(By.id("btn_appeal")).click();
    }

    public void 点击处罚申诉() {
        Constant.driverCourier.findElement(By.id("item_appeal")).click();
    }


    @Given("^遍历版本升级并返回$")
    public void 遍历版本升级并返回() throws Throwable {
        swipe();//向上滑屏
        点击版本升级();

    }
    public void 点击版本升级() {
        Constant.driverCourier.findElement(By.id("item_updateapp")).click();
    }

    public static void swipe() throws InterruptedException{
//先获取宽，也就是X轴的最大长度
        int width=Constant.driverCourier.manage().window().getSize().width;
        System.out.println("获得屏幕宽度是"+width);
//先获取高，也就是Y轴的最大值
        int height=Constant.driverCourier.manage().window().getSize().height;
        System.out.println("获得屏幕高度是"+height);
        Constant.driverCourier.swipe(width/2,height*7/8,width/2,height*1/8,1000);//        向上滑屏
    }

    @Given("^遍历关于并返回$")
    public void 遍历关于并返回() throws Throwable {
        点击关于();
        遍历关于();
        点击返回按钮();//返回更多页面
    }

    public void 遍历关于() {
        String btn = Constant.driverCourier.findElement(By.id("title_txt")).getText();
        Assert.assertEquals("关于",btn);
    }

    public void 点击关于() {
        Constant.driverCourier.findElement(By.id("item_about")).click();
    }

    @Given("^没有预约单与实时单选项$")
    public void 没有预约单与实时单选项() throws Throwable {
        boolean  btn= CommonTools.checkElementExit(Constant.driverCourier,"id","tv_offwork");
        Assert.assertEquals(true,btn);//断言
    }

    @Given("^遍历服务分并返回$")
    public void 遍历服务分并返回() throws Throwable {
        点击我的闪送();
        点击服务分();
        遍历服务分说明();
        点击返回按钮();

    }
    public void 点击我的闪送() {
        Constant.driverCourier.findElement(By.id("menu_right")).click();
    }
    public void 点击服务分() {
        Constant.driverCourier.findElement(By.id("star_score")).click();
    }
    public void 遍历服务分说明() {
        String btn = Constant.driverCourier.findElement(By.id("title_txt")).getText();
        Assert.assertEquals("服务分说明",btn);
    }

    @Given("^遍历我的订单并返回$")
    public void 遍历我的订单并返回() throws Throwable {
        点击我的订单();
        遍历全部();
        点击进行中();
        遍历进行中();
        点击已完成();
        遍历已完成();
        点击已取消();
        遍历已取消();
        点击返回按钮();

    }
    public void 点击我的订单() {
        Constant.driverCourier.findElement(By.id("item_mytask")).click();
    }
    public void 遍历全部() {
        网络原因();
    }
    public void 点击进行中() {
        listWeblion(2);
    }
    public void 点击已完成() {
        listWeblion(3);
    }
    public void 点击已取消() {
        listWeblion(4);
    }
    public void 遍历进行中() {
        网络原因();
    }
    public void 遍历已完成() {
        网络原因();
    }
    public void 遍历已取消() {
        网络原因();
    }

    public void listWeblion(int i){
        List<WebElement> btnList = Constant.driverCourier.findElementsByClassName("android.widget.TextView");
        for (int j = 0; j < btnList.size(); j++) {
            System.out.println("第"+j+":"+btnList.get(j).getText());
        }
        WebElement btn = btnList.get(i);
        btn.click();
    }

    @Given("^遍历现金账户并返回$")
    public void 遍历现金账户并返回() throws Throwable {
        点击现金账户();
        遍历现金账户();
        点击返回按钮();
    }
    public void 点击现金账户() {
        Constant.driverCourier.findElement(By.id("item_cash_account")).click();
    }
    public void 遍历现金账户() {
        String btn = Constant.driverCourier.findElement(By.id("title_txt")).getText();
        Assert.assertEquals("现金账户",btn);
    }

    @Given("^遍历奖励记录并返回$")
    public void 遍历奖励记录并返回() throws Throwable {
        点击奖惩记录();
        遍历奖励();
        点击惩罚();
        点击返回按钮();
    }
    public void 点击奖惩记录() {
        Constant.driverCourier.findElement(By.id("item_myrewards")).click();
    }
    public void 遍历奖励() {
        String btn = Constant.driverCourier.findElement(By.id("rewards_tab")).getText();
        Assert.assertEquals("奖励",btn);
    }
    public void 点击惩罚() {
        Constant.driverCourier.findElement(By.id("punishment_tab")).click();
    }

    @Given("^遍历奖励活动并返回$")
    public void 遍历奖励活动并返回() throws Throwable {
        点击奖励活动();
        点击接单奖励();
        点击我的奖励();
        遍历我的奖励();
        点击返回按钮();//返回接单奖励
        点击返回按钮();//返回奖励
        点击推荐奖励();
        遍历推荐记录();
        点击返回按钮();//返回奖励
        点击返回按钮();//返回我的闪送


    }
    public void 点击奖励活动() {
        Constant.driverCourier.findElement(By.id("item_rewards_activity")).click();
    }
    public void 点击接单奖励() {
        Constant.driverCourier.findElement(By.id("rl_receive_reward_layout")).click();
    }
    public void 点击我的奖励() {
        Constant.driverCourier.findElement(By.id("right_txt")).click();
    }
    public void 遍历我的奖励() {
        String btn = Constant.driverCourier.findElement(By.id("right_txt")).getText();
        Assert.assertEquals("我的奖励",btn);
    }
    public void 遍历推荐记录() {
        String btn = Constant.driverCourier.findElement(By.id("title_txt")).getText();
        Assert.assertEquals("推荐记录",btn);
    }

    public void 点击推荐奖励() {
        Constant.driverCourier.findElement(By.id("rl_recommended_reward_layout")).click();
    }

    @Given("^遍历我的里程并返回$")
    public void 遍历我的里程并返回() throws Throwable {
        swipe();
        点击我的里程();
        遍历我的里程();
        点击返回按钮();//返回我的闪送
    }
    public void 点击我的里程() {
        Constant.driverCourier.findElement(By.id("item_my_distance")).click();
    }
    public void 遍历我的里程() {
        String btn = Constant.driverCourier.findElement(By.id("title_txt")).getText();
        Assert.assertEquals("我的里程",btn);
    }

    @Given("^遍历培训站点（所有的培训站点都是朝阳区）$")
    public void 遍历培训站点所有的培训站点都是朝阳区() throws Throwable {
        点击培训站点();
        遍历培训站点();
        点击返回按钮();//返回我的闪送
    }
    public void 点击培训站点() {
        Constant.driverCourier.findElement(By.id("item_my_train_site")).click();
    }
    public void 遍历培训站点() {
        String btn = Constant.driverCourier.findElement(By.id("title_txt")).getText();
        Assert.assertEquals("我的培训站点",btn);
    }

    @Given("^进入我的闪送$")
    public void 进入我的闪送() throws Throwable {
        Constant.driverCourier.findElement(By.id("menu_right")).click();
    }



//    TouchAction action = new TouchAction(Constant.driverCourier);
//            action.tap(250, 250).perform();


}
